package com.huan.netty02.handler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

/**
 * @author 作者:刘欢
 * @create 2024-03-20-10:03
 *
 *  通用handler，处理I/O事件
 */
//这个注解是为了线程安全，如果不在乎是否线程安全，不加也可以
@ChannelHandler.Sharable
public class HandlerClientHello extends SimpleChannelInboundHandler<ByteBuf> {
                            /*  SimpleChannelInboundHandler
                             *  这里的类型可以是ByteBuf，也可以是String，还可以是对象，根据实际情况来；
                             ****/

    /**
     * 消息读取方法，注意名称中有个0
     */
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf byteBuf) throws Exception {
                               /*ChannelHandlerContext      ByteBuf
                                *通道上下文，代指Channel；    字节序列，通过ByteBuf操作基础的字节数组和缓冲区，因为JDK原生操作字节麻烦、
                                *                           效率低，所以Netty对字节的操作进行了封装，实现了指数级的性能提升，同时使用更加便利；
                                * */
        /**
         * @Description  处理接收到的消息
         *                                             CharsetUtil.UTF_8： 这个是JDK原生的方法，用于指定字节数组转换为字符串时的编码格式。
         **/
        System.out.println("接收到的消息："+byteBuf.toString(CharsetUtil.UTF_8));

    }


    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        /**
         * @Description  处理I/O事件的异常
         **/
        cause.printStackTrace();
        ctx.close();
    }
}
